package design.decorator;

/**
 * 这个是装饰类的抽象类，同样实现了IComponent接口，保证了具有被装饰类的行为
 * 
 * @author 80002165 @date 2017年6月13日 上午9:11:35
 */
public abstract class Decorator implements IComponent{
    //需要被装饰的对象
    private IComponent component ;
    
    /**
     * 在装饰类初始化时，必须要关联对应的被装饰类
     * @param component
     */
    public Decorator(IComponent component){
        this.component = component ;
    }
    
    public abstract void decorateBefore() ;
    
    public abstract void decorateAfter() ;

    /*
     * @see design.decorator.IComponent#operation()
     */
    @Override
    public void operation() {
        decorateBefore() ;
        component.operation(); 
        decorateAfter() ;
    }
    
}
